package com.jc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class PostgreSQLSP {
    public static void main(String[] args) {
        String url = null;
        String user = null;
        String password = null;

        // 读取数据库配置（适配资源目录）
        try (InputStream file = PostgreSQLSP.class.getClassLoader().getResourceAsStream("db.properties")) {
            if (file == null) {
                System.out.println("错误：未找到 db.properties 文件");
                return;
            }
            Properties pros = new Properties();
            pros.load(file);
            url = pros.getProperty("url");
            user = pros.getProperty("user");
            password = pros.getProperty("password");
        } catch (IOException e) {
            System.out.println("配置文件读取失败：" + e.getMessage());
            return;
        }

        // 校验配置完整性
        if (url == null || user == null || password == null) {
            System.out.println("错误：db.properties 中缺少必要配置");
            return;
        }

        // 注册数据库驱动
        try {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("错误：未找到 PostgreSQL 驱动");
            return;
        }

        // 调用存储过程：使用 CALL 语法，并明确参数类型
        try (Connection conn = DriverManager.getConnection(url, user, password);
             // 修正：PostgreSQL 存储过程调用需用 CALL，且参数类型要匹配
             CallableStatement stmt = conn.prepareCall("CALL add_user(?, ?)")) {

            // 设置输入参数
            stmt.setString(1, "anne"); // 第一个参数：用户名（匹配存储过程的 varchar 类型）
            stmt.setTimestamp(2, new Timestamp(System.currentTimeMillis())); // 第二个参数：创建时间（匹配 timestamp 类型）

            // 执行存储过程
            stmt.execute();
            System.out.println("存储过程调用成功！1111111111111111111111111111111111");
            System.out.println("存储过程调用成功！16666666666111");
            System.out.println("存储过程调用成功！111111111118111");
            System.out.println("存储过程调用成功！1111911111111111111111");
            System.out.println("存储过程调用成功！111111111110111");
            System.out.println("存储过程调用成功！1111111111111111");
            System.out.println("存储过程调用成功！4444444444444444444444444444444444");
            System.out.println("存储过程调用成功！4444444444444444444444444444444444");
            System.out.println("存储过程调用成功！1111111111111111111111111111111111");
            System.out.println("存储过程调用成功！22222222222222222222222222222222222");
            System.out.println("存储过程调用成功！33333333333333333333333333333333333");
            System.out.println("存储过程调用成功！44444444444444444444444444444444444");
            System.out.println("修复完成！44444444444444444444444444444444444");
            System.out.println("修复完成！44444444444444444444444444444444444");

        } catch (SQLException e) {
            System.out.println("存储过程调用失败：" + e.getMessage());
            System.out.println("错误码：" + e.getErrorCode());
        }
    }
}